package done.easy_601_700;

import org.junit.Test;

import static com.study.util.LogUtil.info;

/**
 * 686. Repeated String Match 重复叠加字符串匹配
 * <p>
 * 给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数，
 * 使得字符串B成为叠加后的字符串A的子串，如果不存在则返回 -1。
 * <p>
 * 例1:
 * A = "abcd"
 * B = "cdabcdab"
 * 答案:
 * 3
 * <p>
 * 因为 A 重复叠加三遍后为 “abcdabcdabcd”，此时 B 是其子串；
 * A 重复叠加两遍后为"abcdabcd"，B 并不是其子串。
 * 注意: A 与 B 字符串的长度在1和10000区间范围内。
 *
 * @author 大硕
 * 2019-04-12 8:39 AM
 **/
@SuppressWarnings("all")
public class RepeatedStringMatch {

    public int repeatedStringMatch(String A, String B) {
        // 190412 first
        return -1;
    }

    @Test
    public void test() {
        // 返回 3
        String A = "abcd";
        String B = "cdabcdab";
        info(repeatedStringMatch(A, B));

        // 返回 2
        String A1 = "aaaaaaaaaaaaaaaaaaaab";
        String B1 = "ba";
        info(repeatedStringMatch(A1, B1));

        // 返回 -1
        String A2 = "abcabcabcabc";
        String B2 = "abac";
        info(repeatedStringMatch(A2, B2));

        // 返回 4
        String A3 = "abc";
        String B3 = "cabcabca";
        info(repeatedStringMatch(A3, B3));
    }
}








































/*
public int repeatedStringMatch(String A, String B) {
    int lenA   = A.length();
    int lenB   = B.length();

    StringBuilder res = new StringBuilder(A);
    int lenStr = lenA;
    int count  = 1;

    // NO.1 长度 B > A 的情况下
    // A 先补充到与 B 一样长, 或者刚刚超过 B 的长度
    while (lenStr < lenB) {
        res.append(A);
        lenStr += lenA;
        count++;
    }

    // NO.2 长度 A > B 的情况下
    // 只需要最后增加一次，再不行就真不行了
    String resA = res.toString();
    if (!resA.contains(B)) {
        resA = resA + A;
        count++;

        // 最后加了一次 A 的情况下，还不能找到 B
        // 那就代表真的不行了, 返回 -1
        if (!resA.contains(B)) {
            return -1;
        }
    }
    return count;
}
*/
